package com.mybatisplus.demo.android.util;

import com.mybatisplus.demo.android.model.FileInfo;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

/**
 * 文件上传工具类
 */
public class FileUploadUtil {
    /**
     * 文件的存储地址
     */
//    public static String path = "D:/springboot-fileupload";
    public static String path = "/root/springboot";//阿里云文件保存地址

    /**
     * 将file存储到本地
     *
     * @param files
     * @param userId
     */
    public static List<FileInfo> saveFiles(List<MultipartFile> files, String userId) {

        List<FileInfo> filePathList = new ArrayList<>();

        String filepath = path + "/info/" + userId;

        // 创建文件存放路径实例
        File dest = new File(filepath);

        // 判断文件夹不存在就创建
        if (!dest.exists()) {
            dest.mkdirs();
        } else {
            File[] listFiles = dest.listFiles();
            for (File file2 : listFiles) {
                file2.delete();
            }
        }
        LoggerUtil.info("文件存储地址 ： " + dest, FileUploadUtil.class);

        // 循环遍历，取出单个文件
        for (MultipartFile multipartFile : files) {
            if (!multipartFile.isEmpty()) {
                try {

                    //文件名
                    String fileName = multipartFile.getOriginalFilename();
                    LoggerUtil.info("单个文件 ： " + fileName, FileUploadUtil.class);
                    int size = (int) multipartFile.getSize();
                    LoggerUtil.info("单个文件大小 ： " + size, FileUploadUtil.class);

                    //新文件地址
                    String newfilePath = filepath + "/" + fileName;
                    // 创建文件实例
                    File uploadFile = new File(newfilePath);

                    // 判断文件已经存在，则删除该文件
                    if (uploadFile.exists()) {
                        uploadFile.delete();
                    }

                    // 利于spring中的FileCopyUtils.copy()将文件复制
                    FileCopyUtils.copy(multipartFile.getBytes(), uploadFile);

                    // 将文件路径存入list集合中
                    FileInfo fileInfo = new FileInfo();
                    fileInfo.setFile_path(newfilePath);
                    fileInfo.setFile_size("" + size);
                    fileInfo.setUserId(userId);
                    filePathList.add(fileInfo);
                } catch (IOException e) {
                    e.printStackTrace();
                    filePathList.clear();
                    LoggerUtil.error("文件" + multipartFile.getOriginalFilename() + "存储异常 ： " + e.getMessage(), FileUploadUtil.class);
                    return filePathList;
                }
            } else {
                filePathList.clear();
                LoggerUtil.error("文件" + multipartFile.getOriginalFilename() + "上传失败因为文件为空", FileUploadUtil.class);
                return filePathList;
            }
        }

        return filePathList;
    }

    /**
     * 保存文件 头像唯一 先删除在创建文件夹
     */
    public static String saveFile(String moudel, String userId) {

        String filepath = path + "/" + moudel + "/" + userId + "/";

        // 创建文件存放路径实例
        File dest = new File(filepath);

        // 判断文件夹不存在就创建
        if (!dest.exists()) {
            dest.mkdirs();
        } else {
            File[] listFiles = dest.listFiles();
            for (File file2 : listFiles) {
                file2.delete();
            }
        }
        LoggerUtil.info("文件存储地址 ： " + filepath);

        return filepath;
    }

    /**
     * 中文转utf8防止中文乱码
     *
     * @param name
     * @return
     */
    public String filenameToUtf8(String name) throws UnsupportedEncodingException {

        //把文件名按UTF-8取出并按ISO8859-1编码，保证弹出窗口中的文件名中文不乱码，中文不要太多，最多支持17个中文，因为header有150个字节限制。
        String fileName = new String(name.getBytes("UTF-8"), "ISO8859-1");

        return fileName;
    }
}
